package com.awccis.admin.service;

import com.awccis.admin.model.AdminBean;
import com.awccis.admin.model.DriverLocationBean;
import com.awccis.admin.model.adver.AdverCombineBean;
import com.awccis.admin.model.adver.AdverInfoBean;
import com.awccis.admin.model.commission.CommissionBean;
import com.awccis.admin.model.commission.DriverCommissionBean;
import com.awccis.admin.model.pay.PaySimpleInfoBean;
import com.awccis.admin.model.price.PriceBean;
import com.awccis.customer.model.CustomerInfo;
import com.awccis.driver.model.DriverDetailInfo;
import com.awccis.driver.model.DriverInfo;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * @Author: 纯牛奶丶
 * @Date: 2018-04-14 17:20
 * @Since: 1.0
 * @Description:
 **/
@Service
public interface AdminService {
    
    /**
     * admin登录
     * @param adminBean 用户
     * @return adminBean
     */
    AdminBean adminLogin(AdminBean adminBean);
    
    /**
     * admin重置密码
     *
     * @param map  用户编号 旧密码 新密码
     * @return boolean
     */
    boolean changePwd(HashMap map);
    
    /**
     * 获取所有的管理员
     * @param level
     * @return
     */
    List<AdminBean> getAllAdminInfo(int level);
    
    /**
     * 通过id删除admin
     * @param id 管理员id
     * @return 结果， true or false
     */
    boolean deleteAdminById(int id);
    
    /**
     * 添加管理员
     * @param hashMap adminName adminPasswd adminPowerLevel
     * @return true or false
     */
    boolean addAdmin(HashMap hashMap);
    
    /**
     * 获取所有用户
     *
     * @return CustomerInfo's collection
     */
    LinkedList<CustomerInfo> getAllCustomers();
    
    /**
     * 查询所有司机
     * @return
     */
    LinkedList<DriverInfo> getAllDrivers();

    /**
     * 查询司机信息
     * @param type 查询类型
     * @param value 查询条件
     * @return 列表
     */
    LinkedList<DriverInfo> selectDriverFuzzy(String type, Object value);
    
    /**
     * 查询司机的个人详细信息
     * @param driverId
     * @return
     */
    DriverDetailInfo getDriverDetailInfo(int driverId);
    
    /**
     * 注销账户
     * @param driverId driverId
     * @return 执行结果
     */
    Integer logoffDriverAccount(int driverId);

    /**
     *
     * @return
     */
    Double getExchangeRate();

    /**
     * 获取所有在线的司机的位置和简单信息
     * @return list
     */
    List<DriverLocationBean> getDriverLocationWithOnline();

    /**
     * 获取所有价格体系规则
     * @return list
     */
    List<PriceBean> getAllPriceRule();

    /**
     * 更改价格
     * @param priceBean priceBean
     * @return 更改结果
     */
    Boolean updatePrice(PriceBean priceBean);

    /**
     * 更改价格体系
     * @param list list
     * @return 更改结果
     */
    Boolean updatePriceRule(List<PriceBean> list);

    /**
     * 获取所有抽成体系规则
     * @return list
     */
    List<CommissionBean> getAllCommissionRule();

    /**
     * 更改抽成体系
     * @param list list
     * @return 更改结果
     */
    Boolean updateCommissionRule(List<CommissionBean> list);
    
    /**
     * 记录访问信息
     * @param map 1
     */
    void recordVisitInfo(Map<String, Object> map);

    /**
     * 获取所有需要支付平台费用的司机
     * @param payWeek payWeek
     * @return list
     */
    List<PaySimpleInfoBean> getAllDriverNeedPay(String payWeek);

    /**
     * 直接获取所有需要支付平台费用的司机
     * @param payWeek payWeek
     * @return list
     */
    List<PaySimpleInfoBean> getAllDriverNeedPayDirectly(String payWeek);

    /**
     * 获取所有司机的抽成比例
     * @return
     */
    List<DriverCommissionBean> getAllDriverCommission();

    /**
     * 更改driverCommission
     * @param driverCommissionBean driverCommission
     * @return 执行结果
     */
    Boolean setDriverCommission(DriverCommissionBean driverCommissionBean);

    /**
     * 初始化抽成比例
     * @return 执行结果
     */
    Boolean initDriverCommission(String punishWeek);
}
